热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

多种|抽象性_4种主流的API架构风格对比

篇首语:本文由编程笔记#小编为大家整理,主要介绍了4种主流的API架构风格对比相关的知识,希望对你有一定的参考价值。RPC使用GET来获

篇首语:本文由编程笔记#小编为大家整理,主要介绍了4 种主流的 API 架构风格对比相关的知识,希望对你有一定的参考价值。


RPC 使用 GET 来获取信息,使用 POST 来处理其他所有操作。服务端和客户端之间交互的机制归结为调用端点并获得响应。

易于添加新函数。 如果 API 有了新的需求,我们可以轻松地添加另一个执行这个需求的端点:1)编写一个新函数,并将其放在一个新端点之后;2)现在,客户可以访问这个端点,并获取符合其需求的信息。

高性能。 轻量级的有效负载不会对网络产生压力,以此提供高性能,这对于共享服务器和在工作站网络上执行并行计算非常重要。RPC 还能够优化网络层,使得不同服务之间每天发送海量消息变得非常高效。

内置创建 Web 服务的功能使得 SOAP 能够处理消息通信的同时发送独立于语言和平台响应。

绑定到各种协议。 SOAP 在适用于多种场景的传输协议方面是十分灵活的。

内置错误处理。 SOAP API 规范允许返回带有错误码及其说明的的 XML 重试消息。

一系列的安全拓展。 SOAP 与 ES-Security 集成,因此 SOAP 可满足企业级事务要求。它在事务内部提供了隐私和完整性,同时允许在消息级别进行加密。

SOAP 消息级别的安全性:在标头元素的认证数据以及加密的正文
SOAP 消息包含大量的元数据,并且在请求和响应时仅支持繁冗的 XML 格式。
  • 重量级。 由于 XML 文件的大小,SOAP 服务需要很大的带宽。
  • 非常专业化的知识。 构建 SOAP API 服务器需要对所有涉及到的协议以及它们及其严格的限制都有很深的了解。
  • 乏味的消息更新。 由于需要额外的工作来添加或者删除某个消息属性,这种死板的 SOAP 模式减慢了其被采用的速度。
  • 由于 REST 尽可能地解耦了客户端和服务端,REST 相较于 RPC 可以提供更好的抽象性。具有抽象级别的系统能够封装其实现细节,以更好的标示和维持它的属性。这使得 REST API 足够灵活,可以随着时间的推移而发展,同时保持稳定的系统。

    可发现性: 客户端和服务端之间的通信描述了所有内容,因此不需要外部文档即可了解如何与 REST API 进行交互。

    缓存友好: REST 重用了许多 HTTP 工具,也是唯一一种可以在 HTTP 层面上缓存数据的 API 架构风格。与其相对的是,在任何其他 API 上实现缓存都需要配置其他缓存模块。

    多种格式支持: REST 拥有支持多种格式用于存储和交换数据的能力,这是它如今成为搭建公共 API 的主要选择的原因之一。

    在用于连接不需要查询灵活性的资源驱动型应用时,REST 是一种非常有效的方法。

    GraphQL 提前公开了它能做什么,从而提高了其可发现性。通过将客户端指向 GraphQL API,我们可以发现什么查询语句是可用的。

    没有版本控制: 版本控制的最佳实践是不要对 API 进行版本控制。

    尽管 REST 提供了不同的 API 版本,GraphQL 使用的是不断更新的单一版本,这使用户可以持续访问新功能,并有助于提供更整洁、更可维护的服务器代码。

    详细的错误消息: GraphQL 以类似于 SOAP 的方式提供所发生错误的详细信息。它的错误消息包括所有解析器,并指向确切的发生故障时的查询部分。

    灵活的权限: GraphQL 允许选择性地公开某些功能,同时保留私人信息。而相对应的是,REST 体系架构不能仅显示部分数据,要么是全部数据,要么是没有数据。

    GraphQL 权衡了复杂性,来实现其强大功能。一个请求中的嵌套字段太多会导致系统过载。因此,对于复杂的查询,REST 仍然是更好的选择。

    缓存复杂度。 由于 GraphQL 不再使用 HTTP 缓存语义,因此使用者需要额外自定义缓存。

    大量的预开发教育。 由于没有足够的时间来了解 GraphQL 的某个操作和 SDL,因此许多项目决定采用众所周知的 REST 方法。

    在这种情况下,网络性能和单个消息有效负载优化很重要。因此,GraphQL 为移动设备提供了更有效的数据加载方式。

    复杂的系统和微服务。 GraphQL 能够隐藏其 API 背后的多个系统集成的复杂性。GraphQL 从多个地方聚合数据,并将它们合并为一个全局的模式。对于随时间推移而逐渐扩展的遗留基础架构或第三方 API 来说,这尤其重要。

    5.哪种 API 模式最适用你的用例?

    每个 API 项目都有不同的限制和需求。通常,API 架构的选择取决于:

  • 所使用的编程语言,

  • 你的开发环境,以及

  • 你的资源预算,包括人力资源和财务资源。

  • 在了解了每种设计风格的利与弊之后,API 设计人员可以选择最适合项目的那一种。

  • 具有强耦合性的 RPC 很适用于内部微服务,但它对外部 API 或者 API 服务而言不是一个好的选择。

  • SOAP 的使用有些麻烦,但它强大的安全拓展使它在计费操作、预订系统和支付方面是无可替代的。

  • REST 是针对 API 的最高级别的抽象和最佳模型。但它往往会有些“啰嗦”而增加系统的负担 —— 如果你使用的是移动设备,这是个问题。

  • GraphQL 在数据获取方面向前迈出了一大步,但并不是每个人都有足够的时间后精力来掌握它。

  • 归根结底,去针对一些小型的用例来尝试某种特定 API 架构,并去了解它是否适合你的用例以及是否解决了你的问题,这样做是比较合适的。如果它适用于你的用例,就可以尝试扩展并查看它是否适用于更多的用例。

    来源:infoQ

    推荐:

    主流Java进阶技术(学习资料分享)

    PS:因为公众号平台更改了推送规则,如果不想错过内容,记得读完点一下“在看”,加个“星标”,这样每次新文章推送才会第一时间出现在你的订阅列表里。“在看”支持我们吧!  

    推荐阅读
    • 开发笔记:计网局域网:NAT 是如何工作的?
      篇首语:本文由编程笔记#小编为大家整理,主要介绍了计网-局域网:NAT是如何工作的?相关的知识,希望对你有一定的参考价值。 ... [详细]
    • 基于PgpoolII的PostgreSQL集群安装与配置教程
      本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
    • 一句话解决高并发的核心原则
      本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
    • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
    • [译]技术公司十年经验的职场生涯回顾
      本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
    • 如何用UE4制作2D游戏文档——计算篇
      篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
    • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
    • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
      本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
    • Voicewo在线语音识别转换jQuery插件的特点和示例
      本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
    • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
    • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
    • Linux如何安装Mongodb的详细步骤和注意事项
      本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
    • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
    • 本文介绍了OkHttp3的基本使用和特性,包括支持HTTP/2、连接池、GZIP压缩、缓存等功能。同时还提到了OkHttp3的适用平台和源码阅读计划。文章还介绍了OkHttp3的请求/响应API的设计和使用方式,包括阻塞式的同步请求和带回调的异步请求。 ... [详细]
    • 单页面应用 VS 多页面应用的区别和适用场景
      本文主要介绍了单页面应用(SPA)和多页面应用(MPA)的区别和适用场景。单页面应用只有一个主页面,所有内容都包含在主页面中,页面切换快但需要做相关的调优;多页面应用有多个独立的页面,每个页面都要加载相关资源,页面切换慢但适用于对SEO要求较高的应用。文章还提到了两者在资源加载、过渡动画、路由模式和数据传递方面的差异。 ... [详细]
    author-avatar
    娶位红太郎_442
    这个家伙很懒,什么也没留下!
    PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有